/*
 * meituan.com Inc.
 * Copyright (c) 2010-2018 All Rights Reserved.
 */
package practice.v2;

import org.junit.Test;

import java.util.Arrays;
import java.util.Random;

/**
 * <p>
 *
 * </p>
 * @author LvJing
 * @version $Id:BubbleSort.java v1.0 2018/8/15 上午11:09 LvJing Exp $
 */
public class BubbleSort {

    /**
     * 冒泡排序：属于交换类型排序，相邻两个数比较，与期待排序相反的就交换两个数的位置，这样第一趟选出最大的数放在最后，第二趟选出第二大的数放在
     * 倒数第二的位置。。。。直到只剩一个数
     */
    public void bubbleSort(int[] arr) {
        if (arr == null || arr.length == 0 || arr.length == 1)
            return;

        // length-1趟即可，length趟已经只剩一个数，不用排序
        for (int i = 0; i < arr.length - 1; i++) {
            // 待比较和交换的数组角标
            for (int j = 1; j < arr.length -i; j++) {
                if (arr[j -1] > arr[j]) {
                    swap(arr, j - 1, j);
                }
            }
        }
    }

    private void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    @Test
    public void test01() {
        Random random = new Random();
        int[] arr = new int[10];
        for (int i = 0; i < arr.length; i++)
            arr[i] = random.nextInt(100);
        System.out.println(Arrays.toString(arr));
        bubbleSort(arr);
        System.out.println(Arrays.toString(arr));
    }
}
